//
//  $Id: TCUXMLNode.h 2 2007-09-07 18:35:43Z samson.etienne $
//  TCUCoding
//
//  Created by Simon Stapleton on Fri Oct 18 2002.
//  Copyright (c) 2002 Simon Stapleton. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef enum TCUXMLNodeType__ {
    TCUXMLNodeTypeDocument = kCFXMLNodeTypeDocument,
    TCUXMLNodeTypeElement = kCFXMLNodeTypeElement,
    TCUXMLNodeTypeAttribute = kCFXMLNodeTypeAttribute,
    TCUXMLNodeTypeProcessingInstruction = kCFXMLNodeTypeProcessingInstruction,
    TCUXMLNodeTypeComment = kCFXMLNodeTypeComment,
    TCUXMLNodeTypeText = kCFXMLNodeTypeText,
    TCUXMLNodeTypeCDATASection = kCFXMLNodeTypeCDATASection,
    TCUXMLNodeTypeDocumentFragment = kCFXMLNodeTypeDocumentFragment,
    TCUXMLNodeTypeEntity = kCFXMLNodeTypeEntity,
    TCUXMLNodeTypeEntityReference = kCFXMLNodeTypeEntityReference,
    TCUXMLNodeTypeDocumentType = kCFXMLNodeTypeDocumentType,
    TCUXMLNodeTypeWhitespace = kCFXMLNodeTypeWhitespace,
    TCUXMLNodeTypeNotation = kCFXMLNodeTypeNotation,
    TCUXMLNodeTypeElementTypeDeclaration = kCFXMLNodeTypeElementTypeDeclaration,
    TCUXMLNodeTypeAttributeListDeclaration = kCFXMLNodeTypeAttributeListDeclaration
} TCUXMLNodeType;

@interface TCUXMLNode : NSObject <NSCoding, NSCopying> {
}
/*" Node creation

%{Note that not all CFXMLNode types are creatable yet.  This little lot should be enough to be going on with, though, and should definitely be enough for programmatically creating XML tree structures/}"*/
+ (id) documentNodeWithURL:(NSURL*)url encoding:(NSStringEncoding)encoding;
+ (id) elementNodeWithName:(NSString *)name attributes:(NSDictionary *)attributes;
+ (id) attributeNode;
+ (id) processingInstructionNodeWithName:(NSString *)name attributes:(NSDictionary*)attributes;
+ (id) commentNodeWithString:(NSString *)string;
+ (id) textNodeWithString:(NSString *)string;
+ (id) cDataNodeWithString:(NSString*)string;
+ (id) documentFragmentNode;
/*+ (id) entityNodeWithName:(NSString*)name;*/
+ (id) entityReferenceToNodeNamed:(NSString*)name referencedNodeType:(TCUXMLNodeType)type;
+ (id) documentTypeNodeWithURL: (NSURL*) url forRootElement: (NSString*) rootElement publicName: (NSString*) publicName;
+ (id) whitespaceNodeWithString:(NSString*)contents;
+ (id) notationNodeWithURL:(NSURL*)url name:(NSString*)name publicName:(NSString*)publicName;
+ (id) elementTypeDeclarationNodeWithName:(NSString*)name description:(NSString*)description;
+ (id) attributeListDeclarationNode:(NSString*)name attributes:(NSArray*)attributes;

@end
